
import { useInfoStore } from "../store/modules/info";
import {ref } from 'vue'
// import { ElMessage } from "element-plus";
// import { resolve } from "path";
// import { useRouter } from "vue-router";


// const router = useRouter()
const { ipcRenderer } = require("electron");

let websock = null
let serverPort = '13000' // webSocket连接端口
// const wsurl = 'ws://192.168.11.138:13000/ws/accept'; //Websorket本地地址
const wsurl = 'ws://119.91.131.93:13000/ws/accept'; //Websorket测试地址
function getWebIP() {
    let curIP = wsurl
    return curIP
}

let timer = null;
async function initWebSocket(deviceNo) {
    // 初始化weosocket
    // ws地址
    //   let wsuri = 'ws://' + getWebIP() + ':' + serverPort
    websock = new WebSocket(`${wsurl}?deviceNo=${deviceNo}`)
    websock.onopen = function () {
        websocketOpen()
    }
    websock.onmessage = function (e) {
        websocketonmessage(e)
    }

    websock.onclose = function () {
        websocketclose()
    }

    // 连接发生错误的回调方法
    websock.onerror = function () {
        // useInfoStore().SET_wsIsClose(true)
        console.log('WebSocket连接发生错误')
    }
}

// 实际调用的方法
function sendSock(agentData) {
    // globakCallback = callback
    if (websock.readyState === websock.OPEN) {
        // 若是ws开启状态
        websocketsend(agentData)
    } else if (websock.readyState === websock.CONNECTING) {
        // 若是 正在开启状态，则等待1s后重新调用
        setTimeout(function () {
            sendSock(agentData)
        }, 1000)
    } else {
        // 若未开启 ，则等待1s后重新调用
        setTimeout(function () {
            //   sendSock(agentData)
        }, 1000)
    }
}
const time = ref(0)
const ServerMsgTypeLogin = "login"         // 响应登录消息
const ServerMsgTypeLogout = "logout"        // 响应登出消息
const ServerMsgTypeDeviceOnline = "device_online" // 响应pc心跳
const ServerMsgTypeDeviceCall = "device_call"   // 响应通话状态 (0-未能响应,1-拨号中，2-来电中，3-已接通， 4-挂断 5 正在通话中)
// 数据接收
function websocketonmessage(e) {
    // globakCallback(JSON.parse(e.data))
    //   console.log(e)


    useInfoStore().SET_wsIsClose(false)
    const res = e.data.split(',')
    console.log(res, 'res');

    if (res[0] === ServerMsgTypeLogin) {
        useInfoStore().SET_deviceStatus(res[1])//设备是否在线
        // if(res[1] !=='-1'){
        //     console.log('socket11111111');
        //     ipcRenderer.send('login')
        // }
    } else if (res[0] === ServerMsgTypeDeviceCall) {
        // useInfoStore().SET_deviceStatus(res[5]) 
        // useInfoStore().SET_deviceStatus('1')
        useInfoStore().SET_bleStatus(res[1]) //蓝牙状态
        useInfoStore().SET_phoneName(res[2]) //蓝牙状态
        if (res[3]) {
            useInfoStore().SET_nowCall(res[3]) // 拨打的号码
            useInfoStore().SET_lastCall({ deviceNo: useInfoStore().deviceNo, phone: res[3] }) // 拨打的号码
        } else {
            useInfoStore().SET_nowCall('')
        }
        useInfoStore().SET_bleName(res[4]) //蓝牙名称
        useInfoStore().SET_deviceUseStatus(res[5]) //设备使用状态
        // console.log(useInfoStore().bleStatus, '蓝牙状态');
        if(res[5]==='3'){
            useInfoStore().SET_isTime(true)
        }else{
            useInfoStore().SET_isTime(false)
        }
        
        
    } else if (res[0] === ServerMsgTypeDeviceOnline) {
        
        if (res[3]) {
            useInfoStore().SET_nowCall(res[3]) // 拨打的号码
            useInfoStore().SET_lastCall({ deviceNo: useInfoStore().deviceNo, phone: res[3] }) // 拨打的号码
        } else {
            useInfoStore().SET_nowCall('')
        }

    }

    if (res[0] === ServerMsgTypeDeviceCall) {
        useInfoStore().SET_deviceStatus('1')

    }
    useInfoStore().SET_loginStatus(res[0])
    // useInfoStore().SET_deviceStatus(res[1])
    // useInfoStore().SET_phoneName(res[2])
    // useInfoStore().SET_nowCall(res[3])
    // useInfoStore().SET_bleName(res[4])
    // useInfoStore().SET_deviceUseStatus(res[5])
    // localStorage.setItem('loginResult', e.data)
}

// 数据发送
function websocketsend(agentData) {
    console.log(agentData,'数据发送');
    websock.send(agentData)
}

// 关闭
function websocketclose() {
    // console.log('connection closed (' + e.code + ')')
    console.log('websocket 连接关闭')
    // useInfoStore().SET_wsIsClose(true)
    clearInterval(timer)
    if(!useInfoStore().wsIsClose){
        initWebSocket(useInfoStore().deviceNo);
    }
   
}

function websocketOpen() {
    console.log('websoket 连接成功')
    timer = setInterval(() => {
        websocketsend('ping')
    }, 1000);
}



export default { initWebSocket, sendSock, websocketclose, websocketOpen, websocketonmessage, websocketsend }

